package com.alpha.schema.beans;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Objects;

/**
 * 元数据字段属性定义
 *
 * @author chenruwan
 * @since 2022-01-01
 */
@Data
@Accessors(chain = true)
public class Field {
    /** 控制字段顺序，根据 schema 配置自动解析 */
    private int sequence;
    /** 字段名 */
    private String name;
    /** 字段类型，参考 SchemaType */
    private String type;
    /** 描述 */
    private String desc;
    /** 是否非空，对应 schema 的 not-null 属性 */
    private String notNull;
    /** 默认值，对应 schema 的 default 属性 */
    private String defVal;
    /** 列表是否显示 */
    private String visible;
    /** 是否参与智能搜索 */
    private String searchable;
    /** 格式化参数 */
    private String format;
    /** 是否不可编辑 */
    private String unmodifiable;
    /** 是否唯一 */
    private String unique;

    public Field() {
    }

    public Field(String name, String type, String desc) {
        this.name = name;
        this.type = type;
        this.desc = desc;
    }

    /**
     * 判断是否需要更改表结构
     */
    public boolean isDifferentFrom(Field other) {
        if (this == other) {
            return false;
        }
        return (!Objects.equals(this.getType(), other.getType()) ||
                !Objects.equals(this.getNotNull(), other.getNotNull()) ||
                !Objects.equals(this.getDefVal(), other.getDefVal()) ||
                !Objects.equals(this.getDesc(), other.getDesc()));
    }
}
